package com.hspedu.super_;

public class B extends A {
    public int n1 = 600;

    //访问父类的构造器，super(参数列表);只能放在构造器的第一条，只能出现一句！
    public B(){
        //默认有个super(); 去访问A类中的无参构造器
        //super("jack");
        System.out.println("B类的无参构造器");
    }

    public void test(){
        System.out.println("super.n1=" + super.n1);
    }

    //访问父类的属性，但不能访问父类的private属性
    //用法：super.属性名
    public void hi() {
        System.out.println(super.n1 + " " + super.n2 + " " + super.n3);
    }


    public void cal(){
        System.out.println("B类的cal() 方法...");
    }

    public void sum(){
        System.out.println("B类的sum() 方法");
        //希望调用父类A的cal方法
        //因为B类中没有cal()方法，因此可以使用以下三种方式

        //找cal方法时，(cal() 和 this.cal())顺序是，
        //1.先找本类，并且有，并且可以调用，则调用
        //2.如果没有，则找父类，如果有，且可以调用，则调用
        //3.父类没有则继续往上找，找父类的父类...
        //4.直到object类
        //提示：1.如果父类在查找过程中，找到了，但是不能访问，则报错
        //     2.如果查找方法的过程中，没有找到，则提示方法不存在

        //cal();
        //this.cal();//等价于cal()

        //super.cal直接在父类中查找cal，其他规则一样
        super.cal();

        //演示访问属性的规则
        System.out.println(n1);//600
        System.out.println(this.n1);//600
        System.out.println(super.n1);//999
        System.out.println(this.age);//111
    }

    //访问父类的方法，但不能访问父类的private方法
    //用法：super.方法名(参数列表)
    public void ok(){
        super.test100();
        super.test200();
        super.test300();
    }



}
